from copy import copy, deepcopy

# 理解深浅拷贝
# 浅拷贝：只拷贝引用类型对象的指针，不拷贝引用类型对象指向的值(只拷贝第一层)
# 深拷贝：同时拷贝引用类型对象及其指向的值
# 引用类型：Python中表现为：list、dict、、set、类对象

a = [1, 2, 3, 3, 4]
b = a
a[1] = 1000  # [1, 1000, 3, 3, 4]
b  # [1, 1000, 3, 3, 4]

s = set([1, 2, 3, 4])

s1 = s

s.add(20)

print(s1)

class Clone:
    """克隆的基类：
    只要继承该类，就可以进行深浅拷贝
    优点：克隆模式通过内存的拷贝的方式进行复制，比new的方式创建对象性能更好；通过深拷贝的方式，可以方便地创建一个具有相同属性
         和行为的另一个对象，特别是对于复杂对象，方便性尤为突出
    """
    def __init__(self):
        super().__init__()

    def clone(self):
        return copy(self)

    def deepClone(self):
        return deepcopy(self)


class People(Clone):
    def __init__(self, name):
        self._name = name

    def getName(self):
        return self._name

    def setName(self, name):
        self._name = name


will = People("Will")

will2 = will.clone()

will2.setName("Tom")

print(will.getName())


